//
//  AppDelegate.swift
//  新浪微博Swift
//
//  Created by 郝俊聪 on 15/5/10.
//  Copyright (c) 2015年 heima. All rights reserved.
//

import UIKit
import AFNetworking

//从沙盒读取数据
var sharedaccount = UserAccount.loadAccountFromSandBox()
let NSSWICTHCONTRONLLERNOTIFICATION = "NSSWICTHCONTRONLLERNOTIFICATION"

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        
        //创建UIWindow
        window = UIWindow(frame: UIScreen.mainScreen().bounds)
        
        window?.makeKeyAndVisible()
        
        //注册用户通知
        registerUserNotification()
        
        //设置最小后台抓取间隔
        application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)
        
        //订阅通知，选择控制器
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "switchController:", name: NSSWICTHCONTRONLLERNOTIFICATION, object: nil)
        
        //设置控制器
        if sharedaccount == nil
        {
            //没有授权，直接显示主页面
            chooseRootViewController("Main")
        }else
        {
            if checkVersion()
            {
                //授权且不是新版本
                chooseRootViewController("Welcome")
            }else
            {
                //授权且是新版本
                chooseRootViewController("NewFeature")
            }
            
        }
        
        println("\(sharedaccount?.access_token)")
        
        //设置全局navigationBar的属性
        UINavigationBar.appearance().tintColor = UIColor.orangeColor()
        
       //设置全局tabbar的属性
        UITabBar.appearance().tintColor = UIColor.orangeColor()
        
        ///打开db(并创建table)
        SQLiteManager.sharedSQLManager().openDB("status.db")
        
        ///设置网络连接小菊花
        AFNetworkActivityIndicatorManager.sharedManager().enabled = true
        
        return true
    }

   //监听到通知要执行的方法
    func switchController(n:NSNotification)
    {
        chooseRootViewController(n.object as! String)
    }
    
   //选择控制器的方法
    func chooseRootViewController(sbName : String)
    {
        let sb = UIStoryboard(name: sbName, bundle: nil)
        window?.rootViewController = sb.instantiateInitialViewController() as? UIViewController
        
    }
    
    //用沙盒记录的版本对比当前版本
    func checkVersion() -> Bool
    {
        //从偏好设置读取版本
        let version = NSUserDefaults.standardUserDefaults().objectForKey("version") as? Double
//        println("\(version)")
        
        
        //从本地info获取当前真实版本
         let currentVersion = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"] as! String
        
        //将本地版本string转成数字
        let currentVersionValue =  NSNumberFormatter().numberFromString(currentVersion)!.doubleValue
        
//        println("\(currentVersion)")
       
        //比较两个版本
        if version == currentVersionValue
        {
            return true
        }
        
        //将真实版本写入偏好试着
        NSUserDefaults.standardUserDefaults().setDouble(currentVersionValue, forKey: "version")
        
        return false
        
    }
    
    ///注册提示许可
    private func registerUserNotification(){
        //三种类型
        let types = UIUserNotificationType.Alert|UIUserNotificationType.Sound|UIUserNotificationType.Badge
        //设置
        let setting = UIUserNotificationSettings(forTypes: types, categories: nil)
        //注册
        UIApplication.sharedApplication().registerUserNotificationSettings(setting)
    }
    
    ///后台抓取数据的代理方法
    func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
        
        /**
        在后台执行的程序有几个要求：
        1. 不能做太大数据量的请求，要尽量的小
        2. 网络请求，结束后，一定要通过回调方法，告诉系统此次网络请求的结果
        - 有数据
        - 无数据
        - 错误
        系统可以根据报告，自动调度后台的网络数据抓取的频率，具体的调度时间，程序员无法干预
        3. 如果后台抓取数据过大，同时网络`超时`频繁，整个后台任务会被系统挂起，不再调度
        */
        
        //请求数据
        HJCStatus.loadUnReadStatus { (count) -> () in
            application.applicationIconBadgeNumber = count
            
            if count > 0 {
                completionHandler(UIBackgroundFetchResult.NewData)
            }else{
                completionHandler(UIBackgroundFetchResult.NoData)
            }
        }
    }
    
    ///程序压后台后，自动清理数据库过期数据
    func applicationDidEnterBackground(application: UIApplication) {
        ///清理缓存
        HJCStatusDAL.autoClearDBDate()
    }
}

